package com.example.myapplication.ui.home

import android.net.Uri
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.widget.ImageView
import android.widget.TextView
import androidx.recyclerview.widget.DiffUtil
import androidx.recyclerview.widget.ListAdapter
import androidx.recyclerview.widget.RecyclerView
import coil.load
import com.example.myapplication.R


// 定义一个数据类来表示每个图片项，可以包含 URI 和选中状态
data class PicItem(
    val uri: Uri,
    var isSelected: Boolean = false,
    val id: String = uri.toString() // 用于 DiffUtil 的唯一标识
)

class PicAdapter(
    private val onItemClick: (PicItem) -> Unit // 用于处理项目点击事件的回调
) : ListAdapter<PicItem, PicAdapter.ViewHolder>(PicDiffCallback()) {

    override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder {
        val inflater = LayoutInflater.from(parent.context)
        // 使用您的布局文件 item_pic_select.xml
        val view = inflater.inflate(R.layout.item_pic_select, parent, false)
        return ViewHolder(view)
    }

    override fun onBindViewHolder(holder: ViewHolder, position: Int) {
        val picItem = getItem(position)
        holder.bind(picItem, onItemClick)
    }

    class ViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) {
        // 获取 item_pic_select.xml 中的视图组件
        private val imageViewPic: ImageView = itemView.findViewById(R.id.imageView)
        private val fileName: TextView = itemView.findViewById(R.id.fileName)

        fun bind(picItem: PicItem, onItemClick: (PicItem) -> Unit) {
            // 使用 Coil 加载图片
            imageViewPic.load(picItem.uri) {
                placeholder(R.drawable.ic_launcher_background) // 可选：设置占位图
                error(R.drawable.ic_launcher_background) // 可选：设置加载错误图
            }
            fileName.text = picItem.id

            // 更新选中状态的可见性
//            imageViewSelection?.visibility = if (picItem.isSelected) View.VISIBLE else View.GONE

            // 设置点击监听器
            itemView.setOnClickListener {
                onItemClick(picItem)
            }
        }
    }

    // DiffUtil 用于高效更新 RecyclerView 列表
    class PicDiffCallback : DiffUtil.ItemCallback<PicItem>() {
        override fun areItemsTheSame(oldItem: PicItem, newItem: PicItem): Boolean {
            return oldItem.id == newItem.id // 使用唯一ID判断是否是同一个项目
        }

        override fun areContentsTheSame(oldItem: PicItem, newItem: PicItem): Boolean {
            return oldItem == newItem // 判断内容是否相同
        }
    }

    // 可选：一个辅助方法来更新特定项目的选中状态
    fun toggleSelection(picItem: PicItem) {
        val currentList = currentList.toMutableList()
        val index = currentList.indexOfFirst { it.id == picItem.id }
        if (index != -1) {
            val item = currentList[index]
            item.isSelected = !item.isSelected
            submitList(currentList) // 重新提交列表以触发更新
            // 或者使用 notifyItemChanged(index) 来获得更好的性能，但需要更小心地管理数据
        }
    }

    fun getSelectedItems(): List<PicItem> {
        return currentList.filter { it.isSelected }
    }
}
